home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / Snippets / Sound / RecordToFile / RecordToFile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-11  |  2.8 KB  |  136 lines  |  [TEXT/MPS ]

  1. #include    <Quickdraw.h>
  2. #include    <Windows.h>
  3. #include    <dialogs.h>
  4. #include    <Files.h>
  5. #include    <StandardFile.h>
  6. #include    <OSEvents.h>
  7. #include    <Memory.h>
  8. #include    <Sound.h>
  9. #include    <SoundInput.h>
  10. #include    <OSUtils.h>
  11.  
  12. #define    TRUE            0xFF
  13. #define    FALSE            0
  14.  
  15. typedef struct {
  16.     short        OnOff;
  17.     short         Level;
  18. } Level;
  19.  
  20. pascal void MyRecComp (SPBPtr inParamPtr);
  21.  
  22.  
  23. #ifdef powerc
  24.    QDGlobals    qd;
  25. #endif
  26.  
  27. main()
  28. {
  29.     Point                where = {20,20};
  30.     SFReply                reply;
  31.     short                SomeRefNum;
  32.     Level                myLevel;
  33.     OSErr                err;
  34.     SPBPtr                RecordRec;
  35.     long                SoundRefNum;
  36.     long                totalMilRecord;
  37.     ParmBlkPtr            paramBlock;
  38.     SICompletionUPP     mySICompletionUPP;
  39.  
  40.         
  41.     
  42.     InitGraf(&qd.thePort);
  43.     FlushEvents(everyEvent, 0);
  44.     InitWindows();
  45.     InitDialogs(nil);
  46.     InitCursor();
  47.     
  48.     SFGetFile (where, "\p", nil, -1, nil, nil, &reply);
  49.     err = FSOpen(reply.fName, reply.vRefNum, &SomeRefNum);
  50.     if (err != noErr)
  51.         Debugger();
  52.         
  53.     err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', 0, 0);
  54.     if (err != noErr)
  55.         Debugger();
  56.     
  57.     err = SPBOpenDevice (nil, siWritePermission, &SoundRefNum);
  58.     if (err != noErr)
  59.         Debugger();
  60.         
  61.     myLevel.OnOff = 1;
  62.     myLevel.Level = 0;
  63.     err = SPBSetDeviceInfo (SoundRefNum,siTwosComplementOnOff, (Ptr) &myLevel);
  64.     if (err != noErr)
  65.         Debugger();
  66.         
  67.     RecordRec = (SPBPtr) NewPtr(sizeof (SPB));
  68.     if (MemError() != noErr || RecordRec == nil)
  69.         Debugger();
  70.         
  71.     /* create a SICompletionUPP */
  72.     mySICompletionUPP = NewSICompletionProc(MyRecComp);
  73.  
  74.     RecordRec->inRefNum = SoundRefNum;
  75.     RecordRec->count = 0;
  76.     RecordRec->milliseconds = 15000;
  77.     RecordRec->bufferLength = 0;
  78.     RecordRec->bufferPtr = nil;
  79.     RecordRec->completionRoutine = mySICompletionUPP;
  80.     RecordRec->interruptRoutine = nil;
  81.     RecordRec->userLong = 0;
  82.     RecordRec->error = 0;
  83.     RecordRec->unused1 = 0;
  84.  
  85.     err = SPBRecordToFile (SomeRefNum, RecordRec, TRUE);
  86.     if (err != noErr)
  87.         Debugger();
  88.         
  89.     do {
  90.         } while (RecordRec->userLong == 0);
  91.         
  92.     totalMilRecord = 15000;
  93.     
  94.     err = SPBMillisecondsToBytes(SoundRefNum, &totalMilRecord);
  95.     if (err != noErr)
  96.         Debugger();
  97.  
  98.     paramBlock = (ParmBlkPtr) NewPtr(sizeof (IOParam));
  99.     if (MemError() != noErr || paramBlock == nil)
  100.         Debugger();
  101.  
  102.     paramBlock->ioParam.ioRefNum = SomeRefNum;
  103.     paramBlock->ioParam.ioPosMode = 1;
  104.     paramBlock->ioParam.ioPosOffset = 0;
  105.         
  106.     err = PBSetFPos(paramBlock, FALSE);
  107.     if (err != noErr)
  108.         Debugger();
  109.  
  110.     err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', totalMilRecord, 0);
  111.     if (err != noErr)
  112.         Debugger();
  113.     
  114.     SPBCloseDevice (SoundRefNum);
  115.         
  116.     DisposePtr ((Ptr) RecordRec);
  117.     
  118.     err = SndStartFilePlay (nil, SomeRefNum, 0, 74000, nil, nil, nil, FALSE);
  119.     if (err != noErr)
  120.         Debugger();
  121.             
  122.     FSClose (SomeRefNum);
  123.     
  124.     DisposeRoutineDescriptor(mySICompletionUPP);
  125. }
  126. /**********************************/
  127.  
  128. pascal void MyRecComp (SPBPtr inParamPtr)
  129. {
  130.     inParamPtr->userLong = 1;
  131.     
  132.     return;
  133. }
  134.  
  135. /**********************************/
  136.